import logging
import os
from common.Logger import logger
import pytest
from common.excel.Excel import get_reader
from keywords.appkeys import App


# from keywords.interkeys import Inter


class Conf:
    def __init__(self):

        self.feature = "项目分组"
        self.feature_idx = 0
        self.cases = []
        self.story = '模块'
        self.s_idx = 1
        self.c_idx = 1
        self.app = App()
        # self.inter=Inter()

    def runAppCase(self, casefile=''):

        reader = get_reader(casefile)
        # 读取每个sheet表的表名然后遍历
        sheetnames = reader.get_sheets()
        for sheet in sheetnames:
            # 项目名称等于表名称
            self.feature = sheet
            # 项目序号+1
            self.feature_idx += 1
            # logging.info(self.feature_idx,self.feature)
            # 读取某个表的行，存进列表lines
            reader.set_sheets(sheet)
            lines = reader.readline()
            # 定义空列表
            case = []
            # 遍历列表lines的长度
            self.story_idx = 0
            for i in range(1, len(lines)):
                # 把每一行存进line列表
                line = lines[i]
                # print(line)
                # 如果第一格存在，就是分组信息
                if len(line[0]) > 1:
                    # 如果case存在，可能刚开始遍历，说明这case是上一个模块下的case，需要存进cases然后运行
                    if case:
                        self.cases.append(case)
                        self.__run_pytest()
                        # 运行后清空case
                        case = []
                    # 模块名称等于第一格
                    self.story = line[0]
                    # 模块序号加1
                    self.story_idx += 1
                # 如果第二格存在，说明是测试用例名称
                elif len(line[1]) > 0:
                    # 如果cese存在，说明是上一个测试用例的内容，需要存进cases
                    if case:
                        self.cases.append(case)
                        # 清空cese内容
                        case = []
                    # 如果case不存在，说明是新的测试用例，存进case
                    case.append(line)
                # 如果第一格和第二个都不存在，说明是下一步操作，存进case
                else:
                    case.append(line)
            # 如果case存在，存进ceses
            if case:
                self.cases.append(case)
            # 如果ceses存在，就运行
            if self.cases:
                logging.info(self.cases)
                self.__run_pytest()
        self.s_idx += 1
        os.rename('./ddt/test_%s_%s.py' % (self.s_idx - 1, self.c_idx - 1), './ddt/test_App.py')
        # self.obj.quit()

    def __run_pytest(self):
        if self.c_idx == 1:
            os.rename('./ddt/test_App.py', './ddt/test_1_1.py')
        else:
            try:
                os.rename('./ddt/test_%s_%s.py' % (self.s_idx, self.c_idx - 1),
                          './ddt/test_%s_%s.py' % (self.s_idx, self.c_idx))
            except:
                os.rename('./ddt/test_%s_%s.py' % (self.s_idx - 1, self.c_idx - 1),
                          './ddt/test_%s_%s.py' % (self.s_idx, self.c_idx))

        pytest.main(['-s', './ddt/test_%s_%s.py' % (self.s_idx, self.c_idx), '--alluredir', 'result'])
        self.c_idx += 1
        self.cases.clear()


conf = Conf()

if __name__ == '__main__':
    conf = Conf()
    # conf.obj.attachshoot()
    # conf.runAppCase('../lib/一手app-test.xls')
